package com.atguigu.sort;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;

/**
 * @Author : SunFeng
 * @Description: 选择排序
 * 它的工作原理是每一次从待排序的数据元素中选出最小（或最大）的一个元素，存放在序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（大）元素，
 * 然后放到已排序序列的末尾。以此类推，直到全部待排序的数据元素排完。
 * @Date : 2021/6/30  15:11
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] array = new int[80000];
        for (int i = 0; i < 80000; i++) {
            array[i] = (int) (Math.random() * 8000000);
        }
        System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        selectSort(array);
        System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }

    /**
     * 核心思想是找到当前回合对比值最小的于arr[i] 进行交换数据
     *
     * @param array // 找到最小值   与最小值所在的位置  进行数据交换  每次只交换array[i] 与array[minIndex]
     */
    public static void selectSort(int[] array) {
        for (int i = 0; i < array.length; i++) {
            int minValue = array[i];
            int minIndex = i;

            for (int j = i + 1; j < array.length; j++) {
                if (minValue > array[j]) {
                    minValue = array[j];
                    minIndex = j;
                    j++;
                }
            }
            array[minIndex] = array[i];
            array[i] = minValue;


        }
    }
}
